package main

import (
	// "fmt"
	// "net"
	// "net/http"
	// "sync"

	// "github.com/gorilla/websocket"
)

// // 常量定义
// const (
// 	UDP_IP   = "0.0.0.0"
// 	UDP_PORT = 8888
// 	WS_PORT  = 8765
// 	HTTP_PORT = 4321
// )

// const (
// 	CHUNK     = 1024
// 	FORMAT    = 16               // 对应 pyaudio.paInt16
// 	CHANNELS  = 1
// 	RATE      = 16000
// )

// // 全局变量
// var clients = &sync.Map{} // WebSocket 客户端集合
// var audioChan = make(chan []byte, 100000) // 音频数据通道
// var upgrader = websocket.Upgrader{
// 	ReadBufferSize:  1024,
// 	WriteBufferSize: 1024,
// 	CheckOrigin: func(r *http.Request) bool {
// 		return true // 允许跨域
// 	},
// }

// // 接收 UDP 数据
// func receiveUDPData(port int, ch chan<- []byte) {
// 	udpAddr, _ := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", UDP_IP, port))
// 	conn, _ := net.ListenUDP("udp", udpAddr)
// 	defer conn.Close()

// 	fmt.Printf("UDP server listening on %s:%d\n", UDP_IP, port)

// 	buffer := make([]byte, CHUNK)
// 	for {
// 		n, _, err := conn.ReadFromUDP(buffer)
// 		if err != nil {
// 			fmt.Println("Error reading from UDP:", err)
// 			continue
// 		}
// 		ch <- buffer[:n] // 将数据发送到通道
// 	}
// }

// // 处理 WebSocket 客户端连接
// func handleWebSocket(w http.ResponseWriter, r *http.Request) {
// 	ws, err := upgrader.Upgrade(w, r, nil)
// 	if err != nil {
// 		fmt.Println("Error upgrading to WebSocket:", err)
// 		return
// 	}
// 	defer ws.Close()

// 	// 将客户端添加到客户端集合
// 	clients.Store(ws, true)

// 	for {
// 		_, _, err := ws.ReadMessage() // 监听来自客户端的关闭消息
// 		if err != nil {
// 			if websocket.IsUnexpectedCloseError(err) {
// 				fmt.Printf("WebSocket error: %v\n", err)
// 			}
// 			clients.Delete(ws) // 移除断开的客户端
// 			break
// 		}
// 	}
// }

// // 广播音频数据到所有 WebSocket 客户端
// func broadcastAudioData(clients *sync.Map, audioChan <-chan []byte) {
// 	for data := range audioChan {
// 		clients.Range(func(key interface{}, value interface{}) bool {
// 			client := key.(*websocket.Conn)
// 			if err := client.WriteMessage(websocket.BinaryMessage, data); err != nil {
// 				fmt.Println("Error broadcasting data:", err)
// 				clients.Delete(client)
// 			}
// 			return true
// 		})
// 	}
// }

// // 启动简单的 HTTP 服务器
// func startHTTPServer(port int) {
// 	directory := "./"
// 	fs := http.FileServer(http.Dir(directory))
// 	http.Handle("/", fs)

// 	fmt.Printf("HTTP server started on :%d\n", port)

// 	err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
// 	if err != nil {
// 		fmt.Println("Error starting HTTP server:", err)
// 	}
// }

// func main1() {
// 	// 启动 HTTP 服务器
// 	go startHTTPServer(HTTP_PORT)

// 	// 启动 UDP 数据接收
// 	go receiveUDPData(UDP_PORT, audioChan)

// 	// 启动 WebSocket 服务
// 	http.HandleFunc("/ws", handleWebSocket)
// 	go func() {
// 		http.ListenAndServe(fmt.Sprintf(":%d", WS_PORT), nil)
// 		fmt.Printf("WebSocket server started on :%d\n", WS_PORT)
// 	}()

// 	// 广播音频数据
// 	go broadcastAudioData(clients, audioChan)

// 	// 等待中断信号以优雅退出
// 	fmt.Println("Servers are running. Press Ctrl+C to exit.")
// 	select {}
// }